package wangwenjun.phase2.concurrencypattern.threadmonitor;

/**
 * 定义了在任务执行的生命周期中会被触发的接口， 其中{@link EmptyReturnRunnableStateListener}
 * 是一个空的实现，主要是为了让使用者保持对Thread 类的使用习惯
 * @author ChangLiang
 * @date 2020/6/12
 */
public interface ReturnRunnableStateListener<T> {

    void onStart(Thread thread);

    void onRunning(Thread thread);

    void onFinish(Thread thread, T result);

    void onError(Thread thread, Exception e);

    /**
     * {@link ReturnRunnableStateListener <T>}的空实现 adapter
     * @param <T>
     */
    class EmptyReturnRunnableStateListener<T> implements ReturnRunnableStateListener<T> {

        /**
         * onStart ( Thread thread ）当任务开始执行时会被回调的方法
         * @param thread
         */
        @Override
        public void onStart(Thread thread) {

        }

        /**
         * onRunning ( Thread thread ）任务运行时被回调的方法，由于我们针对的是任务的生
         * 命周期，不同于线程生命周期中的RUNNING 状态，如果当前线程进入了休眠或者
         * 阻塞，那么任务都是running 状态。
         * @param thread
         */
        @Override
        public void onRunning(Thread thread) {

        }

        /**
         * onFinish ( Thread thread , T result ）任务正确执行结束后会被回调，其中result 是任
         * 务执行后的结果，可允许为null
         * @param thread
         * @param result
         */
        @Override
        public void onFinish(Thread thread, T result) {

        }

        /**
         * onError ( Thread thread , Exception e ）任务在运行过程中出现任何异常抛出时，
         * onError 方法都将被回调，并将异常信息一并传入
         * @param thread
         * @param e
         */
        @Override
        public void onError(Thread thread, Exception e) {

        }
    }

}
